import { BleDscpUtils } from '../../utils/BleDscpUtils';
var bleDscpUtils = new BleDscpUtils();
import { PersonalLockOperate } from '../../protocol/dscp/PersonalLockOperate';
var personalLockOperate = new PersonalLockOperate();
import { ProtocolUtils } from '../../utils/ProtocolUtils';
var protocolUtils = new ProtocolUtils();
import { DscpProtocol } from '../../protocol/dscp/DscpProtocol';
let dscpProtocol = new DscpProtocol();
import { ByteUtils } from '../../utils/ByteUtils';
let byteUtils = new ByteUtils();
import { DateUtils } from '../../utils/DateUtils';
let dateUtils = new DateUtils();

/**
 * 错误码说明
 * 当 obj.isSucceed == false 时，obj.errCode 有效：
 * 0xFF：校验失败/执行失败/超时
 * 0x01：电机到位
 * 0x02：握手成功
 * 0x03：开锁成功
 * 0x04：电量低
 * 0x05：机器故障错误
 * 0x06：充电成功
 * 0x07：不支持充电
 */

Page({
  /**
   * 页面的初始数据
   */
  data: {
    isConnected: false,
    bleName: "600010004118",
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    // 蓝牙初始化
    this._setBleStateListener();
    bleDscpUtils.openBluetooth()
    dscpProtocol.setActiveCallback(this);
  },

  onUnload: function () {
    // 结束操作时，关闭蓝牙 Adapter
    bleDscpUtils.closeBleAdapter();
  },

  onShow: function () {
    this.setData({
      isConnected: bleDscpUtils.isConnected
    })
  },

  /**
   * 设置蓝牙监听
   */
  _setBleStateListener() {
    // 蓝牙适配器状态改变
    bleDscpUtils.setOnBleAdapterListener((res) => {
      if (res.discovering) {
        this.setData({
          searching: true,
        })
      } else {
        this.setData({
          searching: false
        })
      }
    })

    // 连接事件监听
    bleDscpUtils.setOnBleConnectStateChangeListener((result) => {
      console.log("------bleTest 页面蓝牙连接------", result)
      this.setData({
        isConnected: result.connected
      })
      if (result.connected) {
        console.warn("-----已连接设备-----" + dateUtils.getTimeStrWithMill());
        my.showToast({
          content: '蓝牙已连接',
          type: 'none',
        });
        // 在页面内连接的设备设置默认密钥
        // bleDscpUtils.setDeviceId(DEFAULT_OPERATE_KEY);
      } else {
        this.data.lockStatus = null;
        my.showToast({
          content: '蓝牙连接断开',
          type: 'none',
        });
      }
    })
  },

  /**
   * 是否断开连接设备
   */
  isConnectedChange(e) {
    console.log("点击了是否连接")
    if (this.data.isConnected) {
      // 断开蓝牙
      bleDscpUtils.closeBleConnect();
    } else if (this.data.searching) {
      // 停止搜索
      bleDscpUtils.stopSearch();
    } else {
      let bleName = this.data.bleName;
      if (bleName) {
        console.log("bleName = " + bleName);
        // 连接蓝牙 - bleName 为蓝牙名称
        bleDscpUtils.startConnect(bleName);
      } else {
        this._showToast("请输入蓝牙名称");
      }
    }
  },

  /**
   * 设备主动上报事件
   */
  onRecvDeviceStatus(cmdData) {
    this._showToast("设备状态上传事件");
  },

  /**
   * 开锁 1 - 主要看
   */
  btnOpenLock1() {
    this._btnOpenLock(1)
  },

  /**
   * 开锁 2
   */
  btnOpenLock2() {
    this._btnOpenLock(2)
  },

  /**
   * 开锁 6
   */
  btnOpenLock6() {
    this._btnOpenLock(6)
  },

  /**
   * 开锁 15
   */
  btnOpenLock15() {
    this._btnOpenLock(15)
  },

  /**
   * 实际开锁
   * 如果发送指令 2.5 秒后没有收到回复，会报超时
   * @param {锁序号，从 1 开始} lockIndex
   */
  _btnOpenLock(lockIndex) {
    console.log("-----开锁", lockIndex, "-----")
    personalLockOperate.openLock((result, obj) => {
      if (obj) {
        if (obj.isSucceed) {
          this._showToast("开锁" + lockIndex + "成功")
          console.log("------开锁" + lockIndex + "成功------")
        } else {
          this._showToast("开锁" + lockIndex + "失败")
          console.log("------开锁" + lockIndex + "失败------", obj)
          console.log("错误码为 = ", obj.errCode)
        }
      } else {
        this._showToast("开锁" + lockIndex + "超时")
        console.log("------开锁" + lockIndex + "超时------")
      }
    }, lockIndex)
  },

  /**
   * 获取电量
   * 如果发送指令 2.5 秒后没有收到回复，会报超时
   * 说明：
   * 只要板子能工作的情况下，“获取电池电压”指令都可以正常接收，“实际电压（VV）”指令也能正常上传；
   * 但如果电池电压小于等于 3.5V 时，可能导致无法正常开锁，需要更换电池
   */
  getBatteryVoc() {
    console.log("-----获取电量-----")
    personalLockOperate.getBatteryVoc((result, obj) => {
      if (obj) {
        if (obj.isSucceed) {
          this._showToast("当前电量" + obj.voc + "V")
          console.log("当前电量" + obj.voc + "V")
        } else {
          this._showToast("获取电量失败")
          console.log("------获取电量失败------", obj)
        }
      } else {
        this._showToast("获取电量超时")
        console.log("------获取电量超时------")
      }
    })
  },

  /******************************** 蓝牙连接 ************************************/
  inputBleName(e) {
    this.setData({
      bleName: e.detail.value
    })
  },

  _showToast(tip) {
    console.log("---" + tip + "---")
    my.showToast({
      content: tip,
    });
  }
})
